﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int i, j, K;//存数码和 
    scanf("%d", &K);
    while (K--)
    {
        int b[17] = { 0 };
        int N, n, n1, m, t, max = 0;//进制 ,n1代替n 
        scanf("%d", &n);
        for (i = 2, N = 2; i <= 16, N <= 16; i++, N++)//N为进制
        {
            m = 0;
            n1 = n;
            while (n1 > 0)
            {
                t = n1 % N;
                n1 /= N;
                m += t;
            }
            b[i] = m;//数码和 
        }
        int cnt[200] = { 0 };//最大9个9 
        for (i = 2; i <= 16; i++)
        {
            cnt[b[i]]++;//记录不同数码和出现次数
            max = max > cnt[b[i]] ? max : cnt[b[i]];
        }
        printf("%d\n", max);
        for (j = 1; j <= 199; j++)//数码和 
        {
            if (cnt[j] == max)//数码和出现次数等于最大次数 
            {
                printf("%d", j);//输出出现的最大数码和是多少 
                for (i = 2; i <= 16; i++) //i是进制 
                {
                    if (b[i] == j)//找到次数最多数码和对应的进制 
                    {
                        printf(" %d", i);
                    }
                }
                printf("\n");
            }
        }
    }
    return 0;
}

/*题目描述
一个10进制数n在2∼16进制下可以得到的不同的数码和，求在这些数码和中，出现次数最多的数码和。


其中数码和2和4分别出现了3次，为最多出现次数。

输入
第一行是一个整数T(1≤T≤1000)，表示样例的个数。 以后每行一个整数n(16≤n≤10^9)。

输出
依次输出各样例的结果，每个样例输出的第一行是最多的次数。
然后，按数码和值的升序依次输出最多次的数码和，每行输出一种。
每行先输出这个数码和的值，然后按进制的顺序输出出现这个数码和的进制，每个值之间用一个空格隔开。

样例输入
3
17
20
1000000000

样例输出
4
5 3 5 7 13
3
2 2 4 10
4 3 5 9
2
34 7 8
*/